/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jmysql.CUsuario;
import validaciones.ValidacionData;
import validaciones.ValidateJSON;

/**
 *
 * @author dblack
 */
public class CNuevoUsuario extends HttpServlet {

    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet CNuevoUsuario</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet CNuevoUsuario at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
             */
        } finally {            
            out.close();
        }
    }

   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

  
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //creamos el objeto que será de investigación
		ValidacionData validacion=new ValidacionData();//"correcto" se inicializa como true
		ValidateJSON udata=new ValidateJSON();
		
		// TODO Auto-generated method stub
		udata.put("nomusuario",request.getParameter("nomusuario").trim().toLowerCase());//nombres de usuario en minuscula
		udata.put("nombre",request.getParameter("nombre").trim());
		udata.put("nopersonal",request.getParameter("nopersonal").trim());
		udata.put("telefono",request.getParameter("telefono").trim());
		udata.put("correo",request.getParameter("correo").trim());
		udata.put("rol",Integer.parseInt(request.getParameter("rol").trim()));
		
		if(request.getParameter("area").trim().compareToIgnoreCase("undefined")==0){
                    if(udata.gInt("rol")==3)
                        udata.put("area",1);//indica que no tiene área especifíca que es la admin
                    else
                        validacion.SetValores("2", "nuevo_cmbox_area", "no hay áreas para asignar al usuario", false);
		}
		else{
                    if(udata.gInt("rol")==3)
                        udata.put("area",1);//indica que no tiene área especifíca que es la admin
                    else
                        udata.put("area", Integer.parseInt(request.getParameter("area")));
		}		

		udata.put("password",request.getParameter("password").trim());
		udata.put("repassword",request.getParameter("repassword").trim());
		udata.put("estado", 1);//siempre inicia activo
		
		/*Validaciones*/
		//nopersonal
		if(validacion.correcto&&!udata.getString("nopersonal").matches("^[0-9]{1,15}$"))
			validacion.SetValores("2", "nopersonal", "datos inválidos", false);
		//nombre
		if(validacion.correcto&&udata.getString("nombre").length()==0)
			validacion.SetValores("1", "nombre", "el campo no puede ser vacío", false);
		if(validacion.correcto&&udata.getString("nombre").length()>70)
			validacion.SetValores("1", "nombre", "la longitud del campo es muy grande", false);
		
		//nomuusario
		if(validacion.correcto&&!udata.getString("nomusuario").matches("^([a-zA-Z])[a-z0-9_]{3,30}$"))
			validacion.SetValores("2", "nomusuario", "datos inválidos", false);	
		
		/*area*/
		if( validacion.correcto && udata.gInt("area")==0 && !(udata.gInt("rol")==new Integer(3)))
			validacion.SetValores("5", "nuevo_cmbox_area","no existen áreas para agregar el usuario", false);
		
		//password
		if(validacion.correcto&&!udata.getString("password").matches("^[A-Za-z0-9]{3,40}$"))
			validacion.SetValores("2", "password", "datos inválidos", false);
		
		//passwords identicos
		if(validacion.correcto&&udata.getString("password").compareTo(udata.getString("repassword"))!=0)
			validacion.SetValores("3", "password", "Los passwords deben ser idénticos", false);
		
		//solo falta la comparacion de nomusuario unica
		if(validacion.correcto){
			CUsuario cu=new CUsuario();//instancia de la conexión de la base de datos
			if(cu.Existe(udata.getString("nomusuario")))
				validacion.SetValores("20", "nomusuario", "El nombre de usuario ya esta en uso", false);
			else{
				//procedemos a guardar la data sino presenta ningún problema
				if(!cu.AgregarUsuario(udata))	//agregamos los permisos la funcipon de java				
					validacion.SetValores("2", "nomusario", "Ocurrio un error en la base de datos", false);
			}
		}
		 
		//se puede decir que todo fue un éxito
		if(validacion.correcto)
			validacion.SetValores("10", "-", "exito!!!", true);
				
		//enviamos mensaje de respuesta
		PrintWriter out = response.getWriter();		
		response.setContentType("application/json");
		
		//imprimimos el valor de json
		out.print(validacion.getJSON());
		out.close();
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
